home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 2 / Apprentice-Release2.iso / Tools / Languages / GCC 1.37.1r14 / usr / gcc archive / gcc-1.37-lib.s < prev    next >
Encoding:
Text File  |  1993-12-01  |  3.0 KB  |  187 lines  |  [TEXT/JRRK]

  1.     .text
  2.     .even
  3.     .globl    ENTRY_SYMBOL
  4.     .globl    __main
  5. ENTRY_SYMBOL:
  6. __main:
  7. ;    .word    $A9FF        ; debugger
  8.     jmp    _main
  9.  
  10.     .even
  11.     .comm _qd,206
  12.     .even
  13. ; subroutines needed in certain awkward SANE situations
  14.     .lcomm    _TMPINT,4
  15.  .globl _XTOU
  16. _XTOU:
  17.     movel    sp@+,a0
  18.     pea        _TMPINT
  19.     movew    #$3010,sp@-
  20.     .word    $a9eb
  21.     movel    _TMPINT,d0
  22.     jmp        a0@
  23.  .globl _XTOI
  24. _XTOI:
  25.     movel    sp@+,a0
  26.     pea        _TMPINT
  27.     movew    #$2810,sp@-
  28.     .word    $a9eb
  29.     movel    _TMPINT,d0
  30.     jmp        a0@
  31. ;
  32. ; memcpy used to initialise large data at start of a subroutine
  33. ;
  34.     .globl     _memcpy
  35. _memcpy:
  36.     link     a6,#0
  37.     movel     a6@(8),a1    ; dest
  38.     movel     a6@(12),a0    ; src
  39.     movel    a6@(16),d0    ; total bytes
  40.     beq    endcpy
  41. nxtcpy:
  42.     moveb     a0@+,a1@+
  43.     dbne    d0,nxtcpy
  44. endcpy:
  45.     unlk     a6
  46.     rts
  47.     .byte     $86
  48.     .ascii     "memcpy"
  49.     .byte    0
  50.     .even
  51.     .word    0    ; dummy size of literals
  52.     .even
  53. ;
  54. ; the actual multiply D0 = D0*D1
  55. ;
  56.  
  57.     .globl     ULMULT
  58. ULMULT:
  59.    movel     d0,d2
  60.    movel     d1,d3
  61.    swap       d2
  62.    muluw     d3,d2
  63.    movel     d0,d4
  64.    movel     d1,d5
  65.    swap       d5
  66.    muluw     d5,d4
  67.    addw      d4,d2
  68.    swap       d2
  69.    clrw      d2
  70.    muluw     d1,d0
  71.    addl      d2,d0
  72.    rts
  73.     .byte     $86
  74.     .ascii     "ULMULT"
  75.     .byte    0
  76.     .even
  77.     .word    0    ; dummy size of literals
  78.     .even
  79. ;
  80. ;    D0 = D0 / D1 (signed)
  81. ;    D1 = D0 % D1 (signed)
  82. ;
  83.  
  84.     .globl SLDIVT
  85. SLDIVT:
  86.    tstl      d0
  87.    jpl      signed_div1
  88.    tstl      d1
  89.    jpl      signed_div2
  90.    negl      d0
  91.    negl      d1
  92.    jbsr        unsigned_div
  93.    negl      d1
  94.    bra        signed_div3
  95. signed_div2:
  96.    negl      d0
  97.    jbsr        unsigned_div
  98.    negl      d0
  99.    negl      d1
  100.    bra        signed_div3
  101. signed_div1:
  102.    tstl      d1
  103.    jpl      unsigned_div
  104.    negl      d1
  105.    jbsr        unsigned_div
  106.    negl      d0
  107. signed_div3:
  108.    rts
  109.     .byte     $86
  110.     .ascii     "SLDIVT"
  111.     .byte    0
  112.     .even
  113.     .word    0    ; dummy size of literals
  114.     .even
  115. ;
  116. ;    D0 = D0 / D1 (unsigned)
  117. ;    D1 = D0 % D1 (unsigned)
  118. ;
  119.  
  120.     .globl ULDIVT
  121. ULDIVT:
  122. unsigned_div:
  123.    movel     #0x0000ffff,d7
  124.    cmpl      d0,d1
  125.    jls      unsigned_div1
  126.    movel     d0,d1
  127.    moveq      #0x00,d0
  128.    bra        unsigned_div99
  129. unsigned_div1:
  130.    cmpl      d7,d0
  131.    jhi      unsigned_div2
  132.    divuw     d1,d0
  133.    swap       d0
  134.    movew     d0,d1
  135.    clrw      d0
  136.    swap       d0
  137.    bra        unsigned_div99
  138. unsigned_div2:
  139.    cmpl      d7,d1
  140.    jhi      unsigned_div3
  141.    movel     d0,d7
  142.    clrw      d0
  143.    swap       d0
  144.    divuw     d1,d0
  145.    swap       d0
  146.    swap       d7
  147.    movew     d0,d7
  148.    swap       d7
  149.    divuw     d1,d7
  150.    movew     d7,d0
  151.    swap       d7
  152.    movew     d7,d1
  153.    bra        unsigned_div99
  154. unsigned_div6:
  155.    subqw     #0x1,d0
  156.    bra      unsigned_div5
  157. unsigned_div3:
  158.    movel     d0,d2
  159.    movel     d1,d3
  160. unsigned_div4:
  161.    lsrl      #0x1,d0
  162.    lsrl      #0x1,d1
  163.    cmpl      d7,d1
  164.    jhi      unsigned_div4
  165.    divuw     d1,d0
  166.    andl      d7,d0
  167. unsigned_div5:
  168.    movew     d3,d1
  169.    muluw     d0,d1
  170.    movel     d3,d7
  171.    swap       d7
  172.    muluw     d0,d7
  173.    swap       d7
  174.    addl      d7,d1
  175.    jcs      unsigned_div6
  176.    subl      d2,d1
  177.    jhi      unsigned_div6
  178.    negl      d1
  179. unsigned_div99:
  180.    rts
  181.     .byte     $86
  182.     .ascii     "ULDIVT"
  183.     .byte    0
  184.     .even
  185.     .word    0    ; dummy size of literals
  186.     .even
  187.